// @Title def.go
// @Description cava client业务结构定义
// @Author yezhibin 2021年5月1日11:42:34
// @Update

package business

import (
	"context"

	"nhooyr.io/websocket"
)

// 消息码常量定义
const (
	cavaClientRegisterReqMsg    = 10000 //client注册请求消息
	cavaClientRegisterRespMsg   = 90000 //client注册响应消息
	cavaTaskReqMsg              = 10001 //任务请求消息
	cavaTaskRespMsg             = 90001 //任务响应消息
	cavaTaskReportNotifyReqMsg  = 10002 //任务报告通知请求消息
	cavaTaskReportNotifyRespMsg = 90002 //任务报告通知响应消息
	cavaRegisterReqMsg          = 10003 //teu注册请求消息
	cavaRegisterRespMsg         = 90003 //teu注册响应消息
	cavaTaskStatusReqMsg        = 10004 //任务状态上报请求消息
	cavaTaskStatusRespMsg       = 90004 //任务状态上报响应消息
	cavaKeepAliveReqMsg         = 10005 //会话保活请求消息
	cavaKeepAliveRespMsg        = 90005 //会话保活响应消息
)

// ClientRegisterReqMsg def
type ClientRegisterReqMsg struct {
	MsgCmd    int    `json:"msg_cmd"`
	Username  string `json:"username"`
	Nonce     string `json:"pwd"`
	Random    string `json:"random"`
	Timestamp string `json:"timestamp"`
	NetID     string `json:"net_id"`
	TraceID   string `json:"trace_id"`
}

// ClientRegisterRespMsg def
type ClientRegisterRespMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	Code    int    `json:"ret_code"`
	RetMsg  string `json:"ret_msg"`
	TraceID string `json:"trace_id"`
}

// TaskReqMsg def
type TaskReqMsg struct {
	MsgCmd        int    `json:"msg_cmd"`
	Timeout       int    `json:"timeout"`
	TaskID        string `json:"task_id"`
	TaskMsg       string `json:"task_msg"`
	TaskDir       string `json:"task_dir"`
	TaskName      string `json:"task_name"`
	TestData      string `json:"test_data"`
	NetID         string `json:"net_id"`
	MailAddr      string `json:"mail_addr"`
	SysType       string `json:"sys_type"`
	TraceID       string `json:"trace_id"`
	BlockPassMail bool   `json:"block_pass_mail"`
}

// TaskRespMsg def
type TaskRespMsg struct {
	MsgCmd   int    `json:"msg_cmd"`
	TaskID   string `json:"task_id"`
	TaskName string `json:"task_name"`
	NetID    string `json:"net_id"`
	Code     int    `json:"ret_code"`
	RetMsg   string `json:"ret_msg"`
	TraceID  string `json:"trace_id"`
}

// KeepAliveReqMsg def
type KeepAliveReqMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	TraceID string `json:"trace_id"`
}

// KeepAliveRespMsg def
type KeepAliveRespMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	Code    int    `json:"ret_code"`
	RetMsg  string `json:"ret_msg"`
	TraceID string `json:"trace_id"`
}

// RegisterReqMsg def
type RegisterReqMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	TeuID   string `json:"teu_id"`
	SysType string `json:"sys_type"`
	TraceID string `json:"trace_id"`
}

// RegisterRespMsg def
type RegisterRespMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	Code    int    `json:"ret_code"`
	RetMsg  string `json:"ret_msg"`
	TraceID string `json:"trace_id"`
}

type TaskSummaryInfo struct {
	PassRate    string
	PassSummary string
}

// TaskReportReqMsg def
type TaskReportReqMsg struct {
	MsgCmd      int    `json:"msg_cmd"`
	TaskID      string `json:"task_id"`
	TaskReport  string `json:"task_report"`
	TaskLog     string `json:"task_log"`
	TaskHtml    string `json:"task_html"`
	PassRate    string `json:"pass_rate"`
	PassSummary string `json:"pass_summary"`
	TaskName    string `json:"task_name"`
	NetID       string `json:"net_id"`
	TeuID       string `json:"teu_id"`
	TraceID     string `json:"trace_id"`
}

// TaskReportRespMsg def
type TaskReportRespMsg struct {
	MsgCmd  int    `json:"msg_cmd"`
	NetID   string `json:"net_id"`
	Code    int    `json:"ret_code"`
	RetMsg  string `json:"ret_msg"`
	TraceID string `json:"trace_id"`
}

// JSONResult def
type JSONResult struct {
	Status     int    `json:"status"`
	Data       string `json:"data"`
	ClientAddr string `json:"clientAddr,omitempty"`
}

// SendRemoteMsg def
type SendRemoteMsg struct {
	conn       *websocket.Conn // 客户端连接
	clientAddr string          // 客户端地址
	msg        interface{}     // 待发送给客户端的消息
	ctx        context.Context // 客户端req对应的ctx
	traceID    string          // trace ID
}

// RecvRemoteMsg def
type RecvRemoteMsg struct {
	conn       *websocket.Conn // 客户端连接
	clientAddr string          // 客户端地址
	msg        interface{}     // 从客户端收到的消息
	ctx        context.Context // 客户端req对应的ctx
	traceID    string          // trace ID
}

// 全局变量声明区
// recvMsgChan def
var recvMsgChan chan RecvRemoteMsg

// sendMsgChan def
var sendMsgChan chan SendRemoteMsg

// taskReqChan def
var taskReqChan chan TaskReqMsg

// closeCh def
var closeCh chan string

// msgTypeMap def
var msgTypeMap map[int]string
